1
效能悖論:為什麼正確的程式碼反而很慢
AI023Lesson 6
00:00

效能悖論 指出,即使一個數學上完美的核心運算(例如 $out = x + y$),若未能分攤 GPU 硬體的固定成本,實際表現反而可能劣於 CPU 迴圈。這種現象通常體現在 啟動稅

1. 「正確性」的迷思

功能上的正確性並不等同於效率。雖然您的 Triton 程式碼可能正確地將工作分配到數千個線程中,但如果總工作量(N)過小,GPU 仍會處於未充分利用狀態。硬體花費在狀態切換上的時間,遠多於實際的運算時間。

2. Python 測量陷阱

使用 Python 進行 GPU 程式碼的效能測試時 time.time() 具有風險。GPU 呼叫是 非同步;Python 只是 排隊 指令並繼續執行。若無 torch.cuda.synchronize(),您測量的是排隊時間。加上同步後,您測量的是 主機至裝置延遲,其長度通常比核心執行時間長達十倍。

Python/驅動程式開銷(啟動稅)核心時間(毫秒)

3. 延遲與吞吐量

要克服此悖論,必須提供足夠的工作量來「隱藏」啟動延遲。這正是從 延遲受限 模式(受制於 CPU-GPU 介面)轉向 吞吐量受限 模式(受限於 GPU 記憶體或運算能力)。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>